package it.traveldream.customer;

import it.traveldream.exception.PacchettoNonValidoException;
import it.traveldreamClient.beans.ClientManagerInterface;
import it.traveldreamClient.beans.ComponentiMgrBeanInterface;
import it.traveldreamClient.beans.UserMgr;
import it.traveldreamClient.beans.dto.AlloggioDTO;
import it.traveldreamClient.beans.dto.EscursioneDTO;
import it.traveldreamClient.beans.dto.PkgDTO;
import it.traveldreamClient.beans.dto.PkgPersonalDTO;
import it.traveldreamClient.beans.dto.TrasportoDTO;

import java.util.List;
import java.util.Map;

import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.RequestScoped;
import javax.faces.bean.SessionScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;



@ManagedBean(name="personalizeMBean")
@SessionScoped
public class PkgPersonalManagedBean {
			
		@EJB
		private ClientManagerInterface mk;
		
		@EJB
		private ComponentiMgrBeanInterface cmp;
		
		@EJB
		private UserMgr usr;
		
		private PkgPersonalDTO pacchettoPersonalDTO;
		private String idTomodify;
		
		
		
		private PkgDTO inPacchettoDTO;
		
		private List<TrasportoDTO> Trasporto;
		
		private List<EscursioneDTO> Escursioni;
		private List<EscursioneDTO> SelectedEscursioni;
		private EscursioneDTO esc;
		
		private List<AlloggioDTO> Alloggi;
			
		AlloggioDTO alloggioTmp;
		
		
		
		public PkgPersonalManagedBean() {
			pacchettoPersonalDTO = new PkgPersonalDTO();
			esc = new EscursioneDTO();

			AlloggioDTO alloggioTmp = new AlloggioDTO();

			
		}




		@PostConstruct
		public void init(){
			Trasporto = cmp.getAllTrasporti();
			Escursioni= cmp.getAllEscursioni();
			Alloggi= cmp.getAllAlloggi();
		}
		
		
		

		public PkgPersonalDTO getPacchettoPersonalDTO() {
			return pacchettoPersonalDTO;
		}
		public void setPacchettoPersonalDTO(PkgPersonalDTO pacchettoPersonalDTO) {
			this.pacchettoPersonalDTO = pacchettoPersonalDTO;
		}
		public String getIdTomodify() {
			return idTomodify;
		}
		public void setIdTomodify(String idTomodify) {
			this.idTomodify = idTomodify;
		}
		public List<TrasportoDTO> getTrasporto() {
			return Trasporto;
		}
		public void setTrasporto(List<TrasportoDTO> trasporto) {
			Trasporto = trasporto;
		}
		public List<EscursioneDTO> getEscursioni() {
			return Escursioni;
		}
		public void setEscursioni(List<EscursioneDTO> escursioni) {
			Escursioni = escursioni;
		}
		public List<EscursioneDTO> getSelectedEscursioni() {
			return SelectedEscursioni;
		}
		public void setSelectedEscursioni(List<EscursioneDTO> selectedEscursioni) {
			SelectedEscursioni = selectedEscursioni;
		}
		public EscursioneDTO getEsc() {
			return esc;
		}
		public void setEsc(EscursioneDTO esc) {
			this.esc = esc;
		}
		public List<AlloggioDTO> getAlloggi() {
			return Alloggi;
		}
		public void setAlloggi(List<AlloggioDTO> alloggi) {
			Alloggi = alloggi;
		}
		
		
		public ClientManagerInterface getPkg() {
			return mk;
		}




		public void setPkg(ClientManagerInterface pkg) {
			this.mk = pkg;
		}




		public ComponentiMgrBeanInterface getCmp() {
			return cmp;
		}




		public void setCmp(ComponentiMgrBeanInterface cmp) {
			this.cmp = cmp;
		}

		public void aggiornaPrezzo(){
			int a;
			if(pacchettoPersonalDTO.getAlloggio() != null)
				a= Integer.parseInt(pacchettoPersonalDTO.getAlloggio().getPrezzo());
			else
				a=0;
			
			int r= Integer.parseInt(pacchettoPersonalDTO.getRitorno().getPrezzo());
			int an= Integer.parseInt(pacchettoPersonalDTO.getAndata().getPrezzo());
			
			Integer pEsc= new Integer(0);
			for(EscursioneDTO e: pacchettoPersonalDTO.getEscursioni())
				pEsc+= Integer.parseInt(e.getPrezzo());
			
			pEsc= pEsc+ a+r+an;
			this.pacchettoPersonalDTO.setPrezzo(pEsc.toString());
		}


		public String loadPkg(){
		       /* FacesContext facesContext = FacesContext.getCurrentInstance();  
		        ExternalContext externalContext = facesContext.getExternalContext();  
		  
		        Map<String, String> params = externalContext.getRequestParameterMap();  
		        inPacchettoDTO = new PkgDTO();
		        idTomodify=params.get("idTomodify");*/
		        
		       /* inPacchettoDTO = mk.ottieniPacchetto(idTomodify);  */

				//alloggioTmp= Alloggi.get(0);
				//alloggioTmp=(inPacchettoDTO.getAlloggio());
				if(inPacchettoDTO.getAlloggio() != null)
					pacchettoPersonalDTO.setAlloggio(inPacchettoDTO.getAlloggio());
				else
					pacchettoPersonalDTO.setAlloggio(Alloggi.get(0));
				
				
				pacchettoPersonalDTO.setAndata(inPacchettoDTO.getAndata());
				pacchettoPersonalDTO.setDescrizione(inPacchettoDTO.getDescrizione());
				pacchettoPersonalDTO.setEscursioni(inPacchettoDTO.getEscursioni());
				pacchettoPersonalDTO.setNome(inPacchettoDTO.getNome());
				pacchettoPersonalDTO.setPrezzo(inPacchettoDTO.getPrezzo());
				pacchettoPersonalDTO.setRitorno(inPacchettoDTO.getRitorno());
				pacchettoPersonalDTO.setIdPacc(inPacchettoDTO.getIdPacc());
				
				if(inPacchettoDTO instanceof PkgPersonalDTO)
					pacchettoPersonalDTO.setMaxPartecipanti( ((PkgPersonalDTO)inPacchettoDTO).getMaxPartecipanti());
			return "/user/PersonalizePkg?faces-redirect=true";
		}
		
		public String update(){
			pacchettoPersonalDTO.setEscursioni(this.getSelectedEscursioni());
			pacchettoPersonalDTO.setEmailP(usr.getMailActualUser());
			
			//pacchettoPersonalDTO.setAlloggio(alloggioTmp);
			
			
		
			
			
			
			
				if(pacchettoPersonalDTO.getAlloggio().getIdProdotto().isEmpty()){
					pacchettoPersonalDTO.setAlloggio(null);
				}
				else
				{
					for(AlloggioDTO al: Alloggi)
						if(al.getIdProdotto().equals(pacchettoPersonalDTO.getAlloggio().getIdProdotto()))
								pacchettoPersonalDTO.setAlloggio(al);
				}
			
			for(TrasportoDTO tr: Trasporto)
				if(tr.getIdProdotto().equals(pacchettoPersonalDTO.getAndata().getIdProdotto()))
						pacchettoPersonalDTO.setAndata(tr);
			
			for(TrasportoDTO tr: Trasporto)
				if(tr.getIdProdotto().equals(pacchettoPersonalDTO.getRitorno().getIdProdotto()))
						pacchettoPersonalDTO.setRitorno(tr);
			
			aggiornaPrezzo();
			
			try {
				mk.modificaPacchetto(pacchettoPersonalDTO);
			} catch (PacchettoNonValidoException e) {
				FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO,e.getMessage(), 
						"")); 
				return "PersonalizePkg";
			}
					
			
			return "index?faces-redirect=true";
		}

		public PkgDTO getInPacchettoDTO() {
			return inPacchettoDTO;
		}

		public void setInPacchettoDTO(PkgDTO inPacchettoDTO) {
			this.inPacchettoDTO = inPacchettoDTO;
		}




		public AlloggioDTO getAlloggioTmp() {
			return alloggioTmp;
		}




		public void setAlloggioTmp(AlloggioDTO alloggioTmp) {
			this.alloggioTmp = alloggioTmp;
		}
		
				
				 
				
}




